package com.example.android.scheduler; import android.app.IntentService; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.support.v4.app.NotificationCompat; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * This {@code IntentService} does the app's actual work. * {@code SampleAlarmReceiver} (a {@code WakefulBroadcastReceiver}) holds a * partial wake lock for this service while the service does its work. When the * service is finished, it calls {@code completeWakefulIntent()} to release the * wake lock. */ public class SampleSchedulingService extends IntentService { public SampleSchedulingService() { super("SchedulingService"); } public static final String TAG = "Scheduling Demo"; // An ID used to post the notification. public static final int NOTIFICATION_ID = 1; // The string the app searches for in the Google home page content. If the app finds // the string, it indicates the presence of a doodle. public static final String SEARCH_STRING = "doodle"; // The Google home page URL from which the app fetches content. // You can find a list of other Google domains with possible doodles here: // http://en.wikipedia.org/wiki/List_of_Google_domains public static final String URL = "http://www.google.com"; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; @Override protected void onHandleIntent(Intent intent) { // BEGIN_INCLUDE(service_onhandle) // The URL from which to fetch content. String urlString = URL; String result =""; // Try to connect to the Google homepage and download content. try { result = loadFromNetwork(urlString); } catch (IOException e) { Log.i(TAG, getString(R.string.connection_error)); } // If the app finds the string "doodle" in the Google home page content, it // indicates the presence of a doodle. Post a "Doodle Alert" notification. if (result.indexOf(SEARCH_STRING) != -1) { sendNotification(getString(R.string.doodle_found)); Log.i(TAG, "Found doodle!!"); } else { sendNotification(getString(R.string.no_doodle)); Log.i(TAG, "No doodle found. :-("); } // Release the wake lock provided by the BroadcastReceiver. SampleAlarmReceiver.completeWakefulIntent(intent); // END_INCLUDE(service_onhandle) } // Post a notification indicating whether a doodle was found. private void sendNotification(String msg) { mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle(getString(R.string.doodle_alert)) .setStyle(new NotificationCompat.BigTextStyle() .bigText(msg)) .setContentText(msg); mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } // // The methods below this line fetch content from the specified URL and return the // content as a string. // /** Given a URL string, initiate a fetch operation. */ private String loadFromNetwork(String urlString) throws IOException { InputStream stream = null; String str =""; try { stream = downloadUrl(urlString); str = readIt(stream); } finally { if (stream != null) { stream.close(); } } return str; } /** * Given a string representation of a URL, sets up a connection and gets * an input stream. * @param urlString A string representation of a URL. * @return An InputStream retrieved from a successful HttpURLConnection. * @throws IOException */ private InputStream downloadUrl(String urlString) throws IOException { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000 /* milliseconds */); conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestMethod("GET"); conn.setDoInput(true); // Start the query conn.connect(); InputStream stream = conn.getInputStream(); return stream; } /** * Reads an InputStream and converts it to a String. * @param stream InputStream containing HTML from www.google.com. * @return String version of InputStream. * @throws IOException */ private String readIt(InputStream stream) throws IOException { StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); for(String line = reader.readLine(); line != null; line = reader.readLine()) builder.append(line); reader.close(); return builder.toString(); } }